Skip to main content

3.4 Lage variabler med aggregerte verdier - aggregate

Med kommandoen aggregate kan du enkelt opprette nye variabler som inneholder aggregerte utregninger basert på eksisterende variabler. Utregningene kan grupperes etter utvalgte kategorier.

La oss si at du har et fullpopulasjons datasett på personnivå som blant annet inneholder en variabel med data om bostedskommune. Du ønsker å legge til en kontekstuell opplysning om antallet bosatte i hver kommune, der alle individer bosatt i samme kommune får samme verdi for antall bosatte. Da setter du enkelt opp følgende uttrykk:

aggregate (count) kjønn -> ant_bosatte, by(kommune)

Man teller altså antall individer med en verdi på kjønn i de respektive kommuner gitt ved by()-uttrykket, noe som er ekvivalent med å foreta en fulltelling (siden alle personer har en verdi for kjønn). Resultatet er en ny variabel, ant_bosatte, som inneholder antallet bosatte i individets bostedskommune. For at opptellingen skal bli riktig, er det viktig at datasettet ditt inneholder en totalpopulasjon (alle bosatt i Norge på det gitte tidspunkt).

Eksempel der vi lager kontekstuelle variabler som viser antall bosatte, antall arbeidssøkere (registrert hos NAV) og andel arbeidssøkere i forhold til befolkningen i hver kommune. Ved å telle alle med en verdi på variabelen arbeidssøker, foretar man i praksis en opptelling av antall arbeidssøkere (det er kun arbeidssøkere hos NAV som har en verdi på denne variabelen, alle andre har missing på denne og holdes derfor utenfor opptellingen):

 require no.ssb.fdb:38 as db

create-dataset arbeidssøkeranalyse
import db/BEFOLKNING_KOMMNR_FAKTISK 2023-01-01 as kommune
import db/BEFOLKNING_KJOENN as kjønn
import db/ARBEIDSSOKER_AS_HOVED 2023-01-31 as arbeidssøker

tabulate arbeidssøker

aggregate (count) kjønn -> ant_bosatte arbeidssøker -> ant_arbeidssøkere, by(kommune)

generate andel_arbeidssøkere = ant_arbeidssøkere / ant_bosatte

//Lager statistikk på antall individer som er bosatt i kommuner gruppert etter hhv. befolkningsstørrelse og antall arbeidssøkere
histogram ant_bosatte, freq
histogram ant_arbeidssøkere, freq
 

Et annet scenario: Du har et datasett med variablene kjønn og lønnsinntekt. Du ønsker å legge til kontekstuell informasjon om gjennomsnittlig lønnsinntekt knyttet til menn og kvinner. Da setter du opp dette uttrykket som lager variabelen snittlønn_kjønn:

aggregate (mean) lønnsinntekt -> snittlønn_kjønn, by(kjønn)

Eksempel der vi lager variabler som viser gjennomsnittslønn for hhv. kjønn, bostedskommune og bostedsfylke, og foretar en analyse av effekten av gjennomsnittslønn i bostedskommunen på egen lønn:

 require no.ssb.fdb:38 as db

create-dataset snittlønnanalyse
import db/INNTEKT_WLONN 2022-12-31 as lønn
import db/BEFOLKNING_KJOENN as kjønn
import db/BEFOLKNING_KOMMNR_FAKTISK 2023-01-01 as kommune

generate fylke = substr(kommune,1,2)

//Lager først lønnsstatistikk fordelt på kjønn og fylke
summarize lønn
tabulate kjønn, summarize(lønn) mean freq
tabulate fylke, summarize(lønn) mean freq

//Lager nye variabler som inneholder snittlønn for hhv. kjønn, kommune og fylke
aggregate (mean) lønn -> snittlønn_kjønn, by(kjønn)
aggregate (mean) lønn -> snittlønn_kommune, by(kommune)
aggregate (mean) lønn -> snittlønn_fylke, by(fylke)

//Analyserer sammenheng mellom individuell lønn og snittlønn i kommunen man bor i. Ved å kjøre lineær regresjon kontrollerer vi for effekter som skyldes kjønn og bostedsfylke
correlate lønn snittlønn_kommune
regress lønn i.kjønn i.fylke snittlønn_kommune
 

Måletypene som er tilgjengelig for aggregate() er de samme som for collapse():

  • count (antall enheter med gyldig verdi)
  • mean
  • median
  • min
  • max
  • sum
  • sd (standardavvik)
  • semean (standardfeil av gjennomsnitt)
  • sebinomial (binomial standardfeil av gjennomsnitt)
  • percent (prosentandel gyldige verdier)
  • iqr (interkvartilbredde)

Merk at aggregate() lar deg lage flere variabler med aggregerte utregninger, og med ulike typer utregninger.

Eksempler:

 aggregate (mean) lønn -> snittlønn (min) lønn -> minimumslønn (max) lønn -> maksimumslønn, by(kjønn)

aggregate (mean) lønn -> snittlønn formue -> snittformue strømforbruk -> snittforbruk (max) strømforbruk -> maksforbruk, by(kommune)
 

Aggregate vs collapse

Kommandoen aggregate() gjør det kort fortalt mye enklere å lage aggregerte verdier enn ved bruk av kommandoen collapse() (du kan lese mer om kommandoen her):

  • aggregate(): Variabler opprettes med ferdig aggregerte utregninger i eksisterende datasett

  • collapse(): Hele datasettet aggregeres basert på grupperingsvariabelen som benyttes. Om dette er en kommunevariabel og datasettet ditt har person som enhetsnivå, vil datasettet ditt etter operasjonen bli aggregert opp fra person til kommunenivå. Videre vil variabelen du aggregerer opp (f.eks. lønnsinntekt) erstattes med aggregert verdi for det nye aggregeringsnivået (kommune).

  • Begge kommandoene genererer aggregert statistikk som grupperes over en kategorisk variabel, men der collapse() aggregerer hele datasettet opp til det nivået man grupperer verdiene over (f.eks. kommuner), vil aggregate() i stedet bare opprette en ny variabel som inneholder de aggregerte utregningene. Videre vil enheter med samme verdi for grupperingsvariabel (f.eks. alle med samme bostedskommune) få samme aggregerte verdi (f.eks. gjennomsnittsverdi for bostedskommunen).

Man vil få samme resultat gjennom collapse() som for aggregate() dersom man benytter det aggregerte datasettet og kobler dette på rådatasettet med grupperingsvariabelen (kommune) som koblingsnøkkel. Du må da opprette to like datasett der det ene brukes til aggregering, mens det andre (rådatasettet) brukes som base/mottaker for påkobling av de aggregerte verdiene (via grupperingsvariabel).